/**
 * 矩阵中有0的，把其所在的行和列全部置0
 * 利用第一行和第一列作为标记
 * 再单独讨论第一行和第一列有0的情况
 */
var setZeros = function (matrix) {
    let firstColHasZero = false
    let firstRowHasZero = false
    // 检查并标记第一列是否有0
    for (let i = 0; i < matrix.length; i++) {
        if (matrix[i][0] === 0) {
            firstColHasZero = true
        }
    }
    // 检查并标记第一行是否有0
    for (let i = 0; i < matrix[0].length; i++) {
        if (matrix[0][i] === 0) {
            firstRowHasZero = true
        }
    }

    // 利用第一行和第一列标记其他行列是否有0
    for (let row = 1; row < matrix[0].length; row++) {
        for (let col = 1; col < matrix.length; col++) {
            if (matrix[row][col] === 0) {
                matrix[row][0] = 0
                matrix[0][col] = 0
            }
        }
    }
    // 利用第一行和第一列将matrix中其他行列标0
    for (let row = 1; row < matrix[0].length; row++) {
        for (let col = 1; col < matrix.length; col++) {
            if (matrix[row][0] === 0 || matrix[0][col] === 0) {
                matrix[row][col] = 0
            }
        }
    }
    // 单独讨论第一行和第一列有0的情况
    if (firstColHasZero) {
        for (let i = 0; i < matrix.length; i++) {
            matrix[i][0] = 0
        }
    }
    if (firstRowHasZero) {
        for (let i = 0; i < matrix[0].length; i++) {
            matrix[0][i] = 0
        }
    }
    
    return matrix
}